#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define SEP "#"

int charfrequency(char * str , char *letra)
{
  int i=0;
  char *ptr;
  ptr = (char *) memchr(str,*letra, strlen(str));
  
  //verifica a frequencia utilizando memchr
  while(ptr != NULL)
  {
    i++;
    ptr = (char *) memchr(ptr+1, *letra, (strlen(str)-(ptr-str))); 
  }
  return i;
}

/*funcao que pega os argumentos string, caractere e palavra do arquivo*/
/*a funcao retorna 0 se algo nao funcionar e um valor qualquer se ela funcionar*/
char** abre_pega (char* file) 
{
	FILE* ap_file;

	char *vetor, *a, *t=0;
	char** aux;
	long file_size;
	int n_sep=0,i=0,tam=0, ask=0; //variaveis auxiliares
	int c;
	
/*pegar ponteiro do arquivo e ver seu tamanho*/
	ap_file = fopen(file,"r");
	if (ap_file == NULL)
		{
			printf ("arquivo nao encontrado\n");	
      return;	
		}

	fseek(ap_file, 0, SEEK_END); //coloca o cursor no final do arquivo
	file_size = ftell(ap_file)+1;	 //le o numero de bytes ate o final do arquivo
	fseek (ap_file, 0, SEEK_SET); //coloca o cursor no comeco do arquivo
	
/*cria vetor com o tamanho do arquivo*/
	vetor = (char*) malloc (sizeof(char)*file_size);
	
/*coloca os elementos do arquivo no vetor*/
	fgets (vetor, file_size, ap_file);

//verifica se ha campos em branco


  t = strstr(vetor, SEP SEP); //se nao encontrar, retorna NULL
  a = strchr(SEP, vetor[0]); //se o primeiro caracter for um SEPARADOR, ja avisa q existe campo faltante
  n_sep = charfrequency(vetor , SEP); //se nao houver pelo menos 3 separadores, existe campo faltante
  
  if (t != NULL || a != NULL || n_sep < 3)
    {
      printf("Existe campo faltante\n");
      return;
    }
    

//cria um vetor auxiliar onde os dados serao mantidos
        aux = (char**) malloc (sizeof(char*)*file_size);

	/*tokeniza o vetor que e armazenado em um vetor auxiliar*/ 
	
//string
	aux[0] = strtok(vetor, SEP);
        	if (aux[0] == NULL)
		{
			printf ("string nao encontrada\n");
			return;
		}
	printf ("string: %s\n", aux[0]);
	
//caractere		
	aux[1] = strtok(NULL, SEP);
        tam = strlen(aux[1]);
        ask = isalnum(aux[1][0]); //se houver algo nao alfanum, retorna 0
	if (aux[1] == NULL)
		{
			printf ("caractere nao encontrado\n");
      return;			
		}
	else if (ask == 0 || tam!=1)
		{
			printf ("Existe mais de um caractere ou caractere invalido\n");
      return;				
		}
	printf ("caractere: %s\n", aux[1]);


//palavra
	aux[2] = strtok(NULL, SEP);
        tam = strlen(aux[2]); //pega o tamanho da palavra

	if (aux[2] == NULL || tam == 0) 
		{
			printf ("palavra nao encontrada\n");
			return;
		}

/*verifica se ha mais uma palavra*/
	for (i=0;i<tam;i++)
		{
			ask = isalnum(aux[2][i]); //se for alnum, retorna 0
			if (ask == 0)
				{
					printf ("existe mais de uma palavra ou caracter invalido na palavra\n");
					return;
					break;
				}		
		}		
	printf ("palavra: %s\n", aux[2]);
	
/*libera o vetor alocado e fecha o arquivo*/
	free (vetor);
//free (aux);  *** temos que retornar esse pontero(apaga isso)***
	fclose(ap_file);

  return aux;
}

int main ()
{
  int c;
  
  abre_pega("file1.txt");
	system ("pause");

}
